﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LogicaNegocio;
using Entities;
namespace Presentacion.Repartos
{
    public partial class Repartos : System.Web.UI.Page
    {
        private static DateTime fechaHoraEntrega;
        private static Factura f;
        private static List<Detalle_Itinerario> lstItemsItinerario = new List<Detalle_Itinerario>();
        private GestorRepartos gRepartos;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    Page.Title = "Repartos";
                    Itinerario_Reparto aux = null;
                    if (Session["encabezado"] != null)
                    {
                        aux = (Itinerario_Reparto)Session["encabezado"];
                        calFechaEntrega.SelectedDate = aux.Fecha;
                        txtNroCamionReparto.Text = aux.NroCamionReparto.ToString();
                        txtHoraEntrega.Enabled = true;
                        txtObservaciones.Enabled = true;
                        chkEntregado.Enabled = true;
                        btnAgregar.Enabled = true;
                    }
                    txtNroFactura.Enabled = false;
                    btnAceptar.Enabled = false;
                    if (Session["FacturaSelect"] != null)
                        cargarFacturaSeleccionada();
                    if (Session["ListaFact"] != null)
                    {
                        grdDetalleItinerario.DataSource = (List<Detalle_Itinerario>)Session["ListaFact"];
                        grdDetalleItinerario.DataBind();
                    }
                }
                catch (Exception ex)
                {
                    lblMensajeError.Text = ex.Message;
                }
                //Itinerario_Reparto aux = null;
                //if (Session["encabezado"] != null)
                //{
                //    aux = (Itinerario_Reparto)Session["encabezado"];
                //    calFechaEntrega.SelectedDate = aux.Fecha;
                //    txtNroCamionReparto.Text = aux.NroCamionReparto.ToString();
                //    txtHoraEntrega.Enabled = true;
                //    txtObservaciones.Enabled = true;
                //    chkEntregado.Enabled = true;
                //    btnAgregar.Enabled = true;
                //}
                //txtNroFactura.Enabled = false;
                //btnAceptar.Enabled = false;
                //if (Session["FacturaSelect"] != null)
                //    cargarFacturaSeleccionada();
                //if (Session["ListaFact"] != null)
                //{
                //    grdDetalleItinerario.DataSource = (List<Detalle_Itinerario>)Session["ListaFact"];
                //    grdDetalleItinerario.DataBind();
                //}
            }
            Page.Title = "Repartos";
        }
        protected void btnBuscarFacturas_Click(object sender, EventArgs e)
        {
            try
            {
                Itinerario_Reparto aux = null;
                if (Session["encabezado"] == null)
                {
                    aux = new Itinerario_Reparto();
                    if (calFechaEntrega.SelectedDate != null && calFechaEntrega.SelectedDate.Year > 1)
                        aux.Fecha = calFechaEntrega.SelectedDate;
                    if (!string.IsNullOrEmpty(txtNroCamionReparto.Text))
                        aux.NroCamionReparto = Convert.ToInt32(txtNroCamionReparto.Text);
                    calFechaEntrega.Enabled = false;
                    txtNroCamionReparto.Enabled = false;
                    Session["encabezado"] = aux;
                }
                Response.Redirect("~/Ventas/ConsultarVentas.aspx?op=buscar");
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //Itinerario_Reparto aux = null;
            //if (Session["encabezado"] == null)
            //{
            //    aux = new Itinerario_Reparto();
            //    if (calFechaEntrega.SelectedDate != null && calFechaEntrega.SelectedDate.Year > 1)
            //        aux.Fecha = calFechaEntrega.SelectedDate;
            //    if (!string.IsNullOrEmpty(txtNroCamionReparto.Text))
            //        aux.NroCamionReparto = Convert.ToInt32(txtNroCamionReparto.Text);
            //    calFechaEntrega.Enabled = false;
            //    txtNroCamionReparto.Enabled = false;
            //    Session["encabezado"] = aux;
            //}
            //Response.Redirect("~/Ventas/ConsultarVentas.aspx?op=buscar");
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                Factura fs = (Factura)Session["FacturaSelect"];
                if (fs == null)
                    lblErrorDetalle.Text = "No se ha seleccionado una Factura";
                else
                {
                    if (txtHoraEntrega.Text.Length == 5)
                    {
                        Detalle_Itinerario dr = new Detalle_Itinerario();
                        dr.IdFactura = fs.IdFactura;
                        DateTime? fechaEntrega = calFechaEntrega.SelectedDate;
                        if (fechaEntrega != null && fechaEntrega!=DateTime.MinValue)
                        {
                            double hh = -1;
                            double mm = -1;
                            if (!string.IsNullOrEmpty(txtHoraEntrega.Text) && txtHoraEntrega.Text.Length == 5)
                            {
                                hh = Convert.ToDouble(txtHoraEntrega.Text.Substring(0, 2));
                                mm = Convert.ToDouble(txtHoraEntrega.Text.Substring(3, 2));
                                fechaEntrega = fechaEntrega.Value.AddHours(hh).AddMinutes(mm);
                            }
                        }
                        else
                        {
                            fechaEntrega = DateTime.Now;
                            double hh = -1;
                            double mm = -1;
                            if (!string.IsNullOrEmpty(txtHoraEntrega.Text) && txtHoraEntrega.Text.Length == 5)
                            {
                                hh = Convert.ToDouble(txtHoraEntrega.Text.Substring(0, 2));
                                mm = Convert.ToDouble(txtHoraEntrega.Text.Substring(3, 2));
                                fechaEntrega = fechaEntrega.Value.AddHours(hh).AddMinutes(mm);
                            }
                        }
                        dr.FechaHoraEntrega = fechaEntrega;
                        dr.Entregado = chkEntregado.Checked;
                        dr.Observaciones = txtObservaciones.Text.ToString().Trim();
                        if (!validarRepetidos(dr.IdFactura))
                        {
                            lstItemsItinerario.Add(dr);
                            if (lstItemsItinerario != null && lstItemsItinerario.Count > 0)
                                Session["ListaFact"] = lstItemsItinerario;
                            grdDetalleItinerario.DataSource = lstItemsItinerario;
                            grdDetalleItinerario.DataBind();
                        }
                        btnAceptar.Enabled = true;
                        txtNroFactura.Text = "";
                        txtObservaciones.Text = "";
                        txtHoraEntrega.Text = "";
                        chkEntregado.Checked = false;
                        calFechaEntrega.Enabled = false;
                        txtNroCamionReparto.Enabled = false;
                    }
                    else
                    {
                        lblErrorDetalle.ForeColor = System.Drawing.Color.Red;
                        lblErrorDetalle.Text = "No ingreso la hora de entrega del Reparto";
                    }
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //Factura fs = (Factura)Session["FacturaSelect"];
            //if (fs == null)
            //    lblErrorDetalle.Text = "No se ha seleccionado una Factura";
            //else
            //{
            //    if (txtHoraEntrega.Text.Length == 5)
            //    {
            //        Detalle_Itinerario dr = new Detalle_Itinerario();
            //        dr.IdFactura = fs.IdFactura;
            //        DateTime? fechaEntrega = calFechaEntrega.SelectedDate;
            //        if (fechaEntrega != null)
            //        {
            //            double hh = -1;
            //            double mm = -1;
            //            if (!string.IsNullOrEmpty(txtHoraEntrega.Text) && txtHoraEntrega.Text.Length == 5)
            //            {
            //                hh = Convert.ToDouble(txtHoraEntrega.Text.Substring(0, 2));
            //                mm = Convert.ToDouble(txtHoraEntrega.Text.Substring(3, 2));
            //                fechaEntrega = fechaEntrega.Value.AddHours(hh).AddMinutes(mm);
            //            }
            //        }
            //        dr.FechaHoraEntrega = fechaEntrega;
            //        dr.Entregado = chkEntregado.Checked;
            //        dr.Observaciones = txtObservaciones.Text.ToString().Trim();
            //        if (!validarRepetidos(dr.IdFactura))
            //        {
            //            lstItemsItinerario.Add(dr);
            //            if (lstItemsItinerario != null && lstItemsItinerario.Count > 0)
            //                Session["ListaFact"] = lstItemsItinerario;
            //            grdDetalleItinerario.DataSource = lstItemsItinerario;
            //            grdDetalleItinerario.DataBind();
            //        }
            //        btnAceptar.Enabled = true;
            //        txtNroFactura.Text = "";
            //        txtObservaciones.Text = "";
            //        txtHoraEntrega.Text = "";
            //        chkEntregado.Checked = false;
            //        calFechaEntrega.Enabled = false;
            //        txtNroCamionReparto.Enabled = false;
            //    }
            //    else
            //    {
            //        lblErrorDetalle.ForeColor = System.Drawing.Color.Red;
            //        lblErrorDetalle.Text = "No ingreso la hora de entrega del Reparto";
            //    }
            //}
        }
        private void cargarFacturaSeleccionada()
        {
            try
            {
                f = (Factura)Session["FacturaSelect"];
                if (f == null)
                    lblErrorDetalle.Text = "No se ha seleccionado una Factura";
                else
                    txtNroFactura.Text = f.IdFactura.ToString();
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //f = (Factura)Session["FacturaSelect"];
            //if (f == null)
            //    lblErrorDetalle.Text = "No se ha seleccionado una Factura";
            //else
            //    txtNroFactura.Text = f.IdFactura.ToString();
        }
        private bool validarRepetidos(int id)
        {
            if (lstItemsItinerario != null && lstItemsItinerario.Count > 0)
            {
                foreach (var item in lstItemsItinerario)
                {
                    if (id == item.IdFactura)
                        return true;
                }
            }
            return false;
        }
        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (validarItinerario())
                {
                    Itinerario_Reparto itinerario = new Itinerario_Reparto();
                    itinerario.NroCamionReparto = Convert.ToInt32(txtNroCamionReparto.Text);
                    itinerario.Fecha = calFechaEntrega.SelectedDate;
                    gRepartos = new GestorRepartos();
                    int filasAfectadas = 0;
                    gRepartos.registrarReparto(itinerario, lstItemsItinerario, out filasAfectadas);
                    if (filasAfectadas > 0)
                    {
                        Session["ListaFact"] = null;
                        Session["encabezado"] = null;
                        Session["FacturaSelect"] = null;
                        lblResultado.ForeColor = System.Drawing.Color.Green;
                        lblResultado.Text = "Se ha registrado exitosamente el itinerario";
                        //calFechaEntrega = null;
                        lstItemsItinerario = null;
                        txtHoraEntrega.Text = string.Empty;
                        txtNroCamionReparto.Text = string.Empty;
                        txtNroFactura.Text = string.Empty;
                        txtObservaciones.Text = string.Empty;
                        chkEntregado.Checked = false;
                        calFechaEntrega.SelectedDate = new DateTime();
                        btnBuscarFacturas.Enabled = false;
                        txtHoraEntrega.Enabled = false;
                        chkEntregado.Enabled = false;
                        txtObservaciones.Enabled = false;
                        btnAgregar.Enabled = false;
                    }
                    else
                    {
                        lblResultado.ForeColor = System.Drawing.Color.Red;
                        lblResultado.Text = "No se puedo registrar el itinerario";
                    }
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //if (validarItinerario())
            //{
            //    Itinerario_Reparto itinerario = new Itinerario_Reparto();
            //    itinerario.NroCamionReparto = Convert.ToInt32(txtNroCamionReparto.Text);
            //    itinerario.Fecha = calFechaEntrega.SelectedDate;
            //    gRepartos = new GestorRepartos();
            //    int filasAfectadas = 0;
            //    gRepartos.registrarReparto(itinerario, lstItemsItinerario, out filasAfectadas);
            //    if (filasAfectadas > 0)
            //    {
            //        Session["ListaFact"] = null;
            //        Session["encabezado"] = null;
            //        Session["FacturaSelect"] = null;
            //        lblResultado.ForeColor = System.Drawing.Color.Green;
            //        lblResultado.Text = "Se ha registrado exitosamente el itinerario";
            //        //calFechaEntrega = null;
            //        lstItemsItinerario = null;
            //        txtHoraEntrega.Text = string.Empty;
            //        txtNroCamionReparto.Text = string.Empty;
            //        txtNroFactura.Text = string.Empty;
            //        txtObservaciones.Text = string.Empty;
            //        chkEntregado.Checked = false;
            //        calFechaEntrega.SelectedDate = new DateTime();
            //        btnBuscarFacturas.Enabled = false;
            //        txtHoraEntrega.Enabled = false;
            //        chkEntregado.Enabled = false;
            //        txtObservaciones.Enabled = false;
            //        btnAgregar.Enabled = false;
            //    }
            //    else
            //    {
            //        lblResultado.ForeColor = System.Drawing.Color.Red;
            //        lblResultado.Text = "No se puedo registrar el itinerario";
            //    }
            //}
        }
        private bool validarItinerario()
        {
            if (lstItemsItinerario.Count <= 0)
            {
                lblErrorDetalle.Text = "No hay facturas en el Reparto";
                return false;
            }
            else
                return true;
        }
    }
}